Amazon SNS で配信ログを有効にする方法を教えてください
困っていた内容
Amazon SNS の構築を行なっています。
デバックのため通知したメッセージのログを確認したいです。
ログ記録を有効にする方法を教えてください。
どう対応すればいいの?
トピックで「配信ステータスのログ記録」を設定してください。
次のプロトコルに関しては「配信ステータスのログ記録」を設定すると、メッセージに関するログが CloudWatch Logs に出力されます。
- AWS Lambda
- Amazon SQS
- HTTP/HTTPS
- Platform application endpoint
- Amazon Data Firehose
※ SMS に関しては次の記事を参照
Amazon SNSのSMS配信のロギングを有効にしてみた | DevelopersIO
やってみた
Amazon SNS コンソールの「トピックの作成」を選択します。
名前等を入力して「配信ステータスのログ記録」を選択します。
対象プロトコルを選択。
「新しいサービスロールの作成」を選択して「新しいロールの作成」を選択します。
「ロールを作成」を選択します。
「トピックの作成」を選択します。
トピックが作成されます。
「サブスクリプションの作成」を選択します。
送信先となる Lambda を選択して「サブスクリプションの作成」を選択します。
動作テスト
「メッセージの発行」を選択します。
任意の値を入力して「メッセージの発行」を選択します。
メッセージが発行されました。
ログは次のロググループに出力されます。
成功ログ:sns/【リージョン】/【アカウント ID】/【SNS トピック名】
失敗ログ:sns/【リージョン】/【アカウント ID】/【SNS トピック名】/Failure
例:sns/ap-northeast-1/123456789012/hato-sns-logging/Failure
成功時のサンプル
{
"notification": {
"messageMD5Sum": "de74b2dc8cf56b7563cd6408a3040526",
"messageId": "6e27ae47-0485-5284-83bc-f168e7e9f4fb",
"topicArn": "arn:aws:sns:ap-northeast-1:1234567890123:hato-sns-logging",
"timestamp": "2024-08-01 09:28:12.682"
},
"delivery": {
"deliveryId": "b2097e2d-0f1e-5cf4-baf7-2102ec72fece",
"destination": "arn:aws:lambda:ap-northeast-1:1234567890123:function:hato-lambda",
"providerResponse": "{\"lambdaRequestId\":\"46480ce4-21be-4d49-b5d2-3b2d6962f04d\"}",
"dwellTimeMs": 68,
"statusCode": 202
},
"status": "SUCCESS"
}
失敗時のサンプル
{
"notification": {
"messageMD5Sum": "6dadaae3513e6c2d286102556b402245",
"messageId": "6d693e3a-7990-51cb-a25b-61159a494d3b",
"topicArn": "arn:aws:sns:ap-northeast-1:1234567890123:hato-sns-logging",
"timestamp": "2024-08-01 09:30:01.176"
},
"delivery": {
"deliveryId": "a95b619d-b5bf-5908-8a9f-3eb2566636ec",
"destination": "arn:aws:lambda:ap-northeast-1:1234567890123:function:hato-lambda",
"providerResponse": "{\"ErrorCode\":\"AccessDeniedException\",\"ErrorMessage\":\"User: sns.amazonaws.com is not authorized to perform: lambda:InvokeFunction on resource: arn:aws:lambda:ap-northeast-1:1234567890123:function:hato-lambda because no resource-based policy allows the lambda:InvokeFunction action\",\"lambdaRequestId\":\"Unrecoverable\"}",
"dwellTimeMs": 46,
"statusCode": 403
},
"status": "FAILURE"
}